package com.bitoon.basketdudes.web.admin;

import com.bitoon.basketdudes.web.Config;
import com.bitoon.basketdudes.web.jpa.*;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import javax.persistence.EntityManagerFactory;
import org.apache.log4j.Logger;

public class BaseActionAdmin{

    private static BaseActionAdmin instance = null;

    public static BaseActionAdmin getInstance() {
        if (instance==null) {
            instance = new BaseActionAdmin();
        }
        return instance;
    }

    private Logger log = Logger.getLogger(BaseActionAdmin.class);

    /* <Datos para la paginacion> */
    public static final int LISTADO_ADMINISTRADORES_ELEMENTOS_POR_PAGINA = 10;
    public static final int LISTADO_ADMINISTRADORES_HUECOS_LADO_PAGINA = 2;  // Número de "huecos" a los lados de la página central ==> [1 2] 3 [4 5]

    public static final int LISTADO_TIENDA_ELEMENTOS_POR_PAGINA = 10;
    public static final int LISTADO_TIENDA_HUECOS_LADO_PAGINA = 2;  // Número de "huecos" a los lados de la página central ==> [1 2] 3 [4 5]

    public  static final int LISTADO_INGRESOS_ELEMENTOS_POR_PAGINA = 10;
    public  static final int LISTADO_INGRESOS_HUECOS_LADO_PAGINA = 2;  // Número de "huecos" a los lados de la página central ==> [1 2] 3 [4 5]

    public  static final int LISTADO_ESTADISTICAS_OBJETOS_ELEMENTOS_POR_PAGINA = 10;
    public  static final int LISTADO_ESTADISTICAS_OBJETOS_HUECOS_LADO_PAGINA = 2;  // Número de "huecos" a los lados de la página central ==> [1 2] 3 [4 5]

    public  static final int LISTADO_ROLES_ELEMENTOS_POR_PAGINA = 10;
    public  static final int LISTADO_ROLES_HUECOS_LADO_PAGINA = 2;  // Número de "huecos" a los lados de la página central ==> [1 2] 3 [4 5]

    /* version del administrador */
    private final String version;
    private final String[] idiomas;
    private final String idiomaPrincipal;
    private final String[] idiomasNoticias;
    private final String[] banderasLogin;

    private Map session;
    private Properties configuracionGeneral;
    private EntityManagerFactory emfAdmin = null;

    public BaseActionAdmin() {

        //log.debug("en constructor de BaseActionAdmin ... ");
        session = ActionContext.getContext().getSession();

        // Cargar los valores desde la configuración
        Config cfg = Config.getInstance();
        configuracionGeneral = Config.prop;

        version = configuracionGeneral.getProperty("admin.Version");
        //log.debug("Version: " + version);
        
        idiomas = configuracionGeneral.getProperty("admin.Idiomas").split(",");

        banderasLogin = configuracionGeneral.getProperty("admin.LoginFlags").split(",");

        idiomaPrincipal = configuracionGeneral.getProperty("admin.Principal");
        //log.debug("idioma principal: " +idiomaPrincipal);

        idiomasNoticias = configuracionGeneral.getProperty("admin.IdiomasNoticias").split(",");

        try {
            // JPA Units
            emfAdmin = PersistenceManager.getInstance().getEntityManagerFactory("jpa_admin");
        } catch (Exception e) {
            log.error("[ERROR][constructor]: No se pudo conectar a la base de datos: " + e);
        }
    }
    
    public Breadcrumb dameMigas(){
        
        //recojo la accion que ha llamado y retorno el breadcrumb
        String accion = ActionContext.getContext().getName();

        Breadcrumb b = new Breadcrumb(accion);
        b.getMigas();

        return b;
    }

    public String getVersion() {
        return version;
    }

    public String[] getIdiomas() {
        return idiomas;
    }

    public String getIdiomaPrincipal() {
        return idiomaPrincipal;
    }

    public String[] getIdiomasNoticias() {
        return idiomasNoticias;
    }

    public String[] getBanderasLogin() {
        return banderasLogin;
    }
    
    public String dameBanderasLogin(String idioma) {
        String bandera="";

        boolean sw=false;
        for(String flag : banderasLogin){
            if(flag.compareTo(idioma)==0)
            {
                bandera = flag;
                sw=true;
            }
        }
        //para los casos especiales
        if(sw==false){
            //para las banderas raras devolvemos su bandera
            if(idioma.compareTo("en")==0){
                bandera="us";
            }
            if(idioma.compareTo("zh")==0){
                bandera="cn";
            }
        }

        return bandera;
    }

    public Map getSession() {
        return session;
    }

    public void setSession(Map session) {
        this.session = session;
    }

    public EntityManagerFactory getEmfAdmin() {
        return emfAdmin;
    }

    public void setEmfAdmin(EntityManagerFactory emfAdmin) {
        this.emfAdmin = emfAdmin;
    }
}
